Skip to content

Commit 16a2bd2

Browse files
committed
perf: cache SIMD level at startup
1 parent 418eb5e commit 16a2bd2

1 file changed

Lines changed: 9 additions & 2 deletions

File tree

src/simd.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
use std::arch::x86_64::*;
33

44
use memchr::memchr;
5+
use std::sync::OnceLock;
56
use std::sync::atomic::{AtomicU8, Ordering};
67

78
const SIMD_UNKNOWN: u8 = 0;
@@ -13,6 +14,7 @@ const AVX512_UNAVAILABLE: u8 = 2;
1314

1415
static SIMD_STATUS: AtomicU8 = AtomicU8::new(SIMD_UNKNOWN);
1516
static AVX512_STATUS: AtomicU8 = AtomicU8::new(AVX512_UNKNOWN);
17+
static BEST_SIMD_LEVEL: OnceLock<SimdLevel> = OnceLock::new();
1618

1719
#[cfg(all(feature = "simd", target_arch = "x86_64"))]
1820
#[inline]
@@ -1188,17 +1190,22 @@ pub fn scan_boundaries_auto(data: &[u8], max_messages: usize) -> BoundaryResult
11881190
}
11891191
}
11901192

1193+
#[inline]
1194+
fn get_simd_level() -> SimdLevel {
1195+
*BEST_SIMD_LEVEL.get_or_init(|| simd_info().best_available())
1196+
}
1197+
11911198
#[inline]
11921199
pub fn best_simd_level() -> SimdLevel {
1193-
simd_info().best_available()
1200+
get_simd_level()
11941201
}
11951202

11961203
#[inline]
11971204
pub fn dispatch_simd_level<R, F>(f: F) -> R
11981205
where
11991206
F: FnOnce(SimdLevel) -> R,
12001207
{
1201-
let level = best_simd_level();
1208+
let level = get_simd_level();
12021209
f(level)
12031210
}
12041211

0 commit comments

Comments
 (0)