This commit is contained in:
108
Cargo.lock
generated
108
Cargo.lock
generated
@ -228,9 +228,16 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sqlx",
|
||||
"static_init",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.9.1"
|
||||
@ -260,7 +267,7 @@ checksum = "56791e4bd64c99fc361e01008f45c984baa93f12a0957d1b3c51dd2c6baab453"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -317,6 +324,18 @@ version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "cfg_aliases"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
|
||||
|
||||
[[package]]
|
||||
name = "cfg_aliases"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
||||
|
||||
[[package]]
|
||||
name = "ciborium"
|
||||
version = "0.2.2"
|
||||
@ -375,7 +394,7 @@ dependencies = [
|
||||
"heck",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -562,7 +581,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -606,7 +625,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -618,7 +637,7 @@ dependencies = [
|
||||
"once_cell",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -693,7 +712,7 @@ checksum = "7693d9dd1ec1c54f52195dfe255b627f7cec7da33b679cd56de949e662b3db10"
|
||||
dependencies = [
|
||||
"flame",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -792,7 +811,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1209,7 +1228,7 @@ checksum = "6c6e1db7ed32c6c71b759497fae34bf7933636f75a251b9e736555da426f6442"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1710,7 +1729,7 @@ version = "0.5.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"bitflags 2.9.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1821,7 +1840,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2009,7 +2028,7 @@ dependencies = [
|
||||
"quote",
|
||||
"sqlx-core",
|
||||
"sqlx-macros-core",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2032,7 +2051,7 @@ dependencies = [
|
||||
"sqlx-mysql",
|
||||
"sqlx-postgres",
|
||||
"sqlx-sqlite",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
"tokio",
|
||||
"url",
|
||||
]
|
||||
@ -2045,7 +2064,7 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526"
|
||||
dependencies = [
|
||||
"atoi",
|
||||
"base64",
|
||||
"bitflags",
|
||||
"bitflags 2.9.1",
|
||||
"byteorder",
|
||||
"bytes",
|
||||
"crc",
|
||||
@ -2087,7 +2106,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46"
|
||||
dependencies = [
|
||||
"atoi",
|
||||
"base64",
|
||||
"bitflags",
|
||||
"bitflags 2.9.1",
|
||||
"byteorder",
|
||||
"crc",
|
||||
"dotenvy",
|
||||
@ -2146,6 +2165,34 @@ version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
|
||||
|
||||
[[package]]
|
||||
name = "static_init"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8bae1df58c5fea7502e8e352ec26b5579f6178e1fdb311e088580c980dee25ed"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"cfg_aliases 0.2.1",
|
||||
"libc",
|
||||
"parking_lot",
|
||||
"parking_lot_core",
|
||||
"static_init_macro",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "static_init_macro"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1389c88ddd739ec6d3f8f83343764a0e944cd23cfbf126a9796a714b0b6edd6f"
|
||||
dependencies = [
|
||||
"cfg_aliases 0.1.1",
|
||||
"memchr",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "stringprep"
|
||||
version = "0.1.5"
|
||||
@ -2169,6 +2216,17 @@ version = "2.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.101"
|
||||
@ -2194,7 +2252,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2220,7 +2278,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2295,7 +2353,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2382,7 +2440,7 @@ checksum = "1b1ffbcf9c6f6b99d386e7444eb608ba646ae452a36b39737deb9663b610f662"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2538,7 +2596,7 @@ dependencies = [
|
||||
"log",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
@ -2560,7 +2618,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
@ -2779,7 +2837,7 @@ version = "0.39.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"bitflags 2.9.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2825,7 +2883,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
@ -2846,7 +2904,7 @@ checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2866,7 +2924,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
@ -2906,5 +2964,5 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.101",
|
||||
]
|
||||
|
@ -56,6 +56,7 @@ bytemuck = "1.23.1"
|
||||
flame = "0.2.2"
|
||||
flamer = "0.5.0"
|
||||
rayon = "1.10.0"
|
||||
static_init = "1.0.4"
|
||||
|
||||
[dev-dependencies]
|
||||
criterion = "0.5"
|
||||
|
@ -2,10 +2,7 @@ use std::{
|
||||
cell::RefCell,
|
||||
fs::File,
|
||||
path::PathBuf,
|
||||
sync::{
|
||||
LazyLock,
|
||||
atomic::{AtomicU32, Ordering},
|
||||
},
|
||||
sync::atomic::{AtomicU32, Ordering},
|
||||
time::Instant,
|
||||
};
|
||||
|
||||
@ -18,6 +15,7 @@ use hashbrown::HashMap;
|
||||
use log::{debug, error, info, trace};
|
||||
use memmap2::{Mmap, MmapOptions};
|
||||
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
||||
use static_init::dynamic;
|
||||
|
||||
type DynError = Box<dyn std::error::Error>;
|
||||
|
||||
@ -438,7 +436,8 @@ fn prepare_initial_food(request: &Request) -> Box<[(u8, u8)]> {
|
||||
x: (request.board.width - 1) / 2,
|
||||
y: (request.board.height) / 2,
|
||||
};
|
||||
let initial_food = request
|
||||
|
||||
request
|
||||
.board
|
||||
.snakes
|
||||
.iter()
|
||||
@ -499,8 +498,7 @@ fn prepare_initial_food(request: &Request) -> Box<[(u8, u8)]> {
|
||||
.az();
|
||||
(selected, possibilities)
|
||||
})
|
||||
.collect();
|
||||
initial_food
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn prepare_starts(request: &Request) -> (bool, [Option<u8>; 4], [Option<u8>; 4]) {
|
||||
@ -830,23 +828,26 @@ impl GoRand {
|
||||
}
|
||||
}
|
||||
|
||||
static CHAIN_RAW: LazyLock<Mmap> = LazyLock::new(|| unsafe {
|
||||
#[dynamic]
|
||||
static CHAIN_RAW: Mmap = unsafe {
|
||||
MmapOptions::new()
|
||||
.populate()
|
||||
.map(&File::open("assets/chain").unwrap())
|
||||
.unwrap()
|
||||
});
|
||||
static CHAIN: LazyLock<&[i32]> = LazyLock::new(|| cast_slice(&CHAIN_RAW));
|
||||
static TABLE_RAW: LazyLock<Mmap> =
|
||||
LazyLock::new(|| unsafe { Mmap::map(&File::open("assets/table").unwrap()).unwrap() });
|
||||
static TABLE: LazyLock<&[u32]> = LazyLock::new(|| cast_slice(&TABLE_RAW));
|
||||
};
|
||||
#[dynamic]
|
||||
static CHAIN: &'static [i32] = cast_slice(&CHAIN_RAW);
|
||||
#[dynamic]
|
||||
static TABLE_RAW: Mmap = unsafe { Mmap::map(&File::open("assets/table").unwrap()).unwrap() };
|
||||
#[dynamic]
|
||||
static TABLE: &'static [u32] = cast_slice(&TABLE_RAW);
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
struct GoSource {
|
||||
tap: u16,
|
||||
feed: u16,
|
||||
base_x_index: usize,
|
||||
vec: HashMap<u16, i64>,
|
||||
state: HashMap<u16, i64>,
|
||||
}
|
||||
|
||||
impl GoSource {
|
||||
@ -871,7 +872,7 @@ impl GoSource {
|
||||
tap: 0,
|
||||
feed: Self::LEN - Self::TAP,
|
||||
base_x_index,
|
||||
vec: HashMap::new(),
|
||||
state: HashMap::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -898,7 +899,7 @@ impl GoSource {
|
||||
self.tap = 0;
|
||||
self.feed = Self::LEN - Self::TAP;
|
||||
self.base_x_index = base_x_index;
|
||||
self.vec.clear();
|
||||
self.state.clear();
|
||||
}
|
||||
|
||||
//#[flame]
|
||||
@ -910,29 +911,29 @@ impl GoSource {
|
||||
let tap = self.tap;
|
||||
|
||||
let feed = *self
|
||||
.vec
|
||||
.state
|
||||
.entry(feed)
|
||||
.or_insert_with(|| seed_one(self.base_x_index, feed));
|
||||
let tap = *self
|
||||
.vec
|
||||
.state
|
||||
.entry(tap)
|
||||
.or_insert_with(|| seed_one(self.base_x_index, tap));
|
||||
let x = feed.wrapping_add(tap);
|
||||
self.vec.insert(self.feed, x);
|
||||
self.state.insert(self.feed, x);
|
||||
x.wrapping_as()
|
||||
}
|
||||
}
|
||||
|
||||
//#[flame]
|
||||
fn seed_one(base: usize, i: u16) -> i64 {
|
||||
const LEN: usize = 0x7fff_fffe;
|
||||
let i = usize::from(i);
|
||||
let base = base + 20 + i * 3;
|
||||
let len = CHAIN.len();
|
||||
|
||||
let (x1, x2, x3) = unsafe {
|
||||
let x1 = *CHAIN.get_unchecked(base % len);
|
||||
let x2 = *CHAIN.get_unchecked((base + 1) % len);
|
||||
let x3 = *CHAIN.get_unchecked((base + 2) % len);
|
||||
let x1 = *CHAIN.get_unchecked(base % LEN);
|
||||
let x2 = seedrand(x1);
|
||||
let x3 = seedrand(x2);
|
||||
(x1, x2, x3)
|
||||
};
|
||||
let u = i64::from(x1) << 40;
|
||||
|
Reference in New Issue
Block a user