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