0.2.16 的一些东西(600!
This commit is contained in:
parent
39cbed260b
commit
76c3928313
@ -2,7 +2,41 @@
|
||||
|
||||
> --team shenjacka -q 5500 --end 1000000000 --bench
|
||||
>
|
||||
> 5600u 单核
|
||||
> 5800x 单核
|
||||
>
|
||||
> 也是 target-cpu=native
|
||||
|
||||
## 0.2.16
|
||||
|
||||
```text
|
||||
❯ .\runs\tswn-0216.exe --team shenjacka -q 5500 --end 1000000000 --bench --bench-core 10
|
||||
2024-05-24T16:29:26.365364Z INFO tswn: 输出文件: "./namerena/namerena-shenjacka-2024-05-25_00-29-26.csv"
|
||||
2024-05-24T16:29:26.365555Z INFO tswn: 开始: 0 结尾: 1000000000
|
||||
2024-05-24T16:29:26.365588Z INFO tswn: 线程数: 10
|
||||
2024-05-24T16:29:26.365613Z INFO tswn: 八围预期: 640
|
||||
2024-05-24T16:29:26.365636Z INFO tswn: 队伍名: shenjacka
|
||||
2024-05-24T16:29:26.365660Z INFO tswn: 输出文件名: "./namerena/namerena-shenjacka-2024-05-25_00-29-26.csv"
|
||||
2024-05-24T16:29:26.365684Z INFO tswn: 预期状态输出时间间隔: 10 秒
|
||||
2024-05-24T16:29:26.365708Z INFO tswn: 是否启动 benchmark 模式: true
|
||||
2024-05-24T16:29:26.365735Z INFO tswn: 开始 benchmark
|
||||
2024-05-24T16:29:26.365770Z INFO tswn: 设置进程亲和性成功 1
|
||||
2024-05-24T16:29:26.365813Z INFO tswn: 设置线程亲和性成功 1024
|
||||
2024-05-24T16:29:26.505521Z INFO tswn::cacluate: | 1|Id: 999991|715782.21/s 618.436E/d 0.14⬆️|0 |预计:0:2:19|
|
||||
2024-05-24T16:29:36.566390Z INFO tswn::cacluate: | 1|Id: 72578191|711460.82/s 614.702E/d 10.06⬇️|0 |预计:0:2:10|
|
||||
2024-05-24T16:29:46.625971Z INFO tswn::cacluate: | 1|Id: 143724191|707256.35/s 611.069E/d 10.06⬇️|0 |预计:0:2:1|
|
||||
2024-05-24T16:29:56.552099Z INFO tswn::cacluate: | 1|Id: 214449791|712530.45/s 615.626E/d 9.93⬆️|0 |预计:0:1:50|
|
||||
2024-05-24T16:30:06.548135Z INFO tswn::cacluate: | 1|Id: 285702791|712820.02/s 615.876E/d 10.00⬆️|0 |预计:0:1:40|
|
||||
2024-05-24T16:30:16.560434Z INFO tswn::cacluate: | 1|Id: 356984791|711951.77/s 615.126E/d 10.01⬇️|0 |预计:0:1:30|
|
||||
2024-05-24T16:30:26.561756Z INFO tswn::cacluate: | 1|Id: 428179891|711864.39/s 615.051E/d 10.00⬇️|0 |预计:0:1:20|
|
||||
2024-05-24T16:30:36.553758Z INFO tswn::cacluate: | 1|Id: 499366291|712441.06/s 615.549E/d 9.99⬆️|0 |预计:0:1:10|
|
||||
2024-05-24T16:30:46.564295Z INFO tswn::cacluate: | 1|Id: 570610391|711698.61/s 614.908E/d 10.01⬇️|0 |预计:0:1:0|
|
||||
2024-05-24T16:30:56.546253Z INFO tswn::cacluate: | 1|Id: 641780191|712994.46/s 616.027E/d 9.98⬆️|0 |预计:0:0:50|
|
||||
2024-05-24T16:31:06.581045Z INFO tswn::cacluate: | 1|Id: 713079591|710529.49/s 613.897E/d 10.03⬇️|0 |预计:0:0:40|
|
||||
2024-05-24T16:31:16.584028Z INFO tswn::cacluate: | 1|Id: 784132491|710330.00/s 613.725E/d 10.00⬇️|0 |预计:0:0:30|
|
||||
2024-05-24T16:31:26.534098Z INFO tswn::cacluate: | 1|Id: 855165491|713901.68/s 616.811E/d 9.95⬆️|0 |预计:0:0:20|
|
||||
2024-05-24T16:31:36.546983Z INFO tswn::cacluate: | 1|Id: 926555591|712989.68/s 616.023E/d 10.01⬇️|0 |预计:0:0:10|
|
||||
2024-05-24T16:31:46.714725Z INFO tswn::cacluate: | 1|Id: 997854491|701233.41/s 605.866E/d 10.17⬇️|0 |预计:0:0:0|
|
||||
```
|
||||
|
||||
## 0.2.15
|
||||
|
||||
@ -38,6 +72,8 @@
|
||||
|
||||
## `RUSTFLAGS="-C target-cpu=native"` 0.1.10
|
||||
|
||||
> 5600u 单核
|
||||
|
||||
```text
|
||||
❯ .\runs\tswn-0110-native.exe --team shenjacka -q 5500 --end 1000000000 --bench
|
||||
2024-04-28T13:20:10.027586Z INFO tswn: 输出文件: "./namerena/namerena-shenjacka-2024-04-28_21-20-10.csv"
|
||||
|
@ -1,5 +1,7 @@
|
||||
/// 虚评 1.3.1
|
||||
|
||||
#[cfg(feature = "simd")]
|
||||
use std::simd::f64x4;
|
||||
#[cfg(feature = "simd")]
|
||||
use std::simd::f64x64;
|
||||
#[cfg(feature = "simd")]
|
||||
@ -207,11 +209,27 @@ pub fn predict_20(name: &Namer) -> f64 {
|
||||
let xp = poly(&st);
|
||||
|
||||
let mut sum = xuping20::BASE;
|
||||
let mut _sum_qd = xuping20::BASE_QD;
|
||||
|
||||
unsafe {
|
||||
for (i, xp) in xp.iter().enumerate() {
|
||||
sum += xp * xuping20::MODEL.get_unchecked(i);
|
||||
#[cfg(feature = "simd")]
|
||||
{
|
||||
let mut simd_sum = f64x4::splat(0.0);
|
||||
// 加载四个, 计算, 然后加
|
||||
for i in (0..xp.len() - 2).step_by(4) {
|
||||
let simd_xp = f64x4::from_slice(&xp.get_unchecked(i..));
|
||||
let simd_model = f64x4::from_slice(&xuping20::MODEL.get_unchecked(i..));
|
||||
simd_sum += simd_xp * simd_model;
|
||||
}
|
||||
// 最后加两个
|
||||
sum += simd_sum.reduce_sum();
|
||||
sum += xp.get_unchecked(xp.len() - 2) * xuping20::MODEL.get_unchecked(xp.len() - 2);
|
||||
sum += xp.get_unchecked(xp.len() - 1) * xuping20::MODEL.get_unchecked(xp.len() - 1);
|
||||
}
|
||||
#[cfg(not(feature = "simd"))]
|
||||
{
|
||||
for (i, xp) in xp.iter().enumerate() {
|
||||
sum += xp * xuping20::MODEL.get_unchecked(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -251,13 +269,36 @@ pub fn predict_20_qd(name: &Namer) -> f64 {
|
||||
|
||||
let xp = poly(&st);
|
||||
|
||||
let mut sum_qd = xuping20::BASE_QD;
|
||||
let mut sum = xuping20::BASE_QD;
|
||||
|
||||
for (i, xp) in xp.iter().enumerate() {
|
||||
sum_qd += xp * xuping20::MODEL_QD[i];
|
||||
// for (i, xp) in xp.iter().enumerate() {
|
||||
// sum_qd += xp * xuping20::MODEL_QD[i];
|
||||
// }
|
||||
|
||||
unsafe {
|
||||
#[cfg(feature = "simd")]
|
||||
{
|
||||
let mut simd_sum = f64x4::splat(0.0);
|
||||
// 加载四个, 计算, 然后加
|
||||
for i in (0..xp.len() - 2).step_by(4) {
|
||||
let simd_xp = f64x4::from_slice(&xp.get_unchecked(i..));
|
||||
let simd_model = f64x4::from_slice(&xuping20::MODEL_QD.get_unchecked(i..));
|
||||
simd_sum += simd_xp * simd_model;
|
||||
}
|
||||
// 最后加两个
|
||||
sum += simd_sum.reduce_sum();
|
||||
sum += xp.get_unchecked(xp.len() - 2) * xuping20::MODEL_QD.get_unchecked(xp.len() - 2);
|
||||
sum += xp.get_unchecked(xp.len() - 1) * xuping20::MODEL_QD.get_unchecked(xp.len() - 1);
|
||||
}
|
||||
#[cfg(not(feature = "simd"))]
|
||||
{
|
||||
for (i, xp) in xp.iter().enumerate() {
|
||||
sum += xp * xuping20::MODEL_QD.get_unchecked(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sum_qd
|
||||
sum
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@ -287,6 +328,23 @@ mod test {
|
||||
namer.update_skill();
|
||||
|
||||
println!("{:?}", namer.get_info());
|
||||
#[cfg(not(feature = "simd"))]
|
||||
assert_eq!(predict_20(&namer), 3603.4389333619297);
|
||||
#[cfg(feature = "simd")]
|
||||
assert_eq!(predict_20(&namer), 3603.438933361928);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn xuping_20_1015_qd_test() {
|
||||
// let mut namer = Namer::new(&"pi31uXx?shadow@魔".to_string()).unwrap();
|
||||
let mut namer = Namer::new(&"一一七啺埀㴁@shenjack".to_string()).unwrap();
|
||||
// 5971 7226
|
||||
namer.update_skill();
|
||||
|
||||
println!("{:?}", namer.get_info());
|
||||
#[cfg(not(feature = "simd"))]
|
||||
assert_eq!(predict_20_qd(&namer), 3603.4389333619297);
|
||||
#[cfg(feature = "simd")]
|
||||
assert_eq!(predict_20_qd(&namer), 3639.8920896688987);
|
||||
}
|
||||
}
|
||||
|
@ -321,18 +321,14 @@ impl Namer {
|
||||
let val_ptr = self.val.as_mut_ptr();
|
||||
for _ in 0..2 {
|
||||
let mut s = 0_u8;
|
||||
// self.val.swap_unchecked(s as usize, 0);
|
||||
std::ptr::swap(val_ptr.add(s as usize), val_ptr);
|
||||
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(*self.val.get_unchecked(i));
|
||||
// self.val.swap_unchecked(i, s as usize);
|
||||
std::ptr::swap(val_ptr.add(i), val_ptr.add(s as usize));
|
||||
k = if k == name_len { 0 } else { k + 1 };
|
||||
}
|
||||
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(*self.val.get_unchecked(i));
|
||||
std::ptr::swap(val_ptr.add(i), val_ptr.add(s as usize));
|
||||
k = if k == name_len { 0 } else { k + 1 };
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// simd!
|
||||
#[cfg(feature = "simd")]
|
||||
@ -447,12 +443,10 @@ impl Namer {
|
||||
|
||||
#[inline(always)]
|
||||
pub fn update_skill(&mut self) {
|
||||
let skill_id = self.skl_id.as_mut();
|
||||
for i in 0..40 {
|
||||
unsafe {
|
||||
*skill_id.get_unchecked_mut(i) = i as u8;
|
||||
}
|
||||
}
|
||||
self.skl_id = [
|
||||
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,
|
||||
32, 33, 34, 35, 36, 37, 38, 39,
|
||||
];
|
||||
|
||||
#[cfg(feature = "simd")]
|
||||
{
|
||||
@ -509,8 +503,8 @@ impl Namer {
|
||||
(((u as u32) << 8 | t as u32) % 40) as u8
|
||||
};
|
||||
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);
|
||||
s = (s as u16 + rnd as u16 + *self.skl_id.get_unchecked(i as usize) as u16) as u8 % 40;
|
||||
self.skl_id.swap_unchecked(i as usize, s as usize);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -523,9 +517,9 @@ impl Namer {
|
||||
)
|
||||
};
|
||||
unsafe {
|
||||
if p > 10 && *skill_id.get_unchecked(j) < 35 {
|
||||
if p > 10 && *self.skl_id.get_unchecked(j) < 35 {
|
||||
*self.skl_freq.get_unchecked_mut(j) = p - 10;
|
||||
if *skill_id.get_unchecked(j) < 25 {
|
||||
if *self.skl_id.get_unchecked(j) < 25 {
|
||||
last = j as i32;
|
||||
}
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user