Preliminary Work of Nehalem & Westmere slice support
This commit is contained in:
parent
b0784fadf8
commit
dfd59064fc
@ -7,7 +7,7 @@ use cpuid::MicroArchitecture;
|
|||||||
pub enum CacheSlicing {
|
pub enum CacheSlicing {
|
||||||
Unsupported,
|
Unsupported,
|
||||||
ComplexAddressing(&'static [usize]),
|
ComplexAddressing(&'static [usize]),
|
||||||
SimpleAddressing(&'static usize),
|
SimpleAddressing(usize),
|
||||||
NoSlice,
|
NoSlice,
|
||||||
}
|
}
|
||||||
const SANDYBRIDGE_TO_SKYLAKE_FUNCTIONS: [usize; 4] = [
|
const SANDYBRIDGE_TO_SKYLAKE_FUNCTIONS: [usize; 4] = [
|
||||||
@ -29,12 +29,15 @@ pub fn cache_slicing(uarch: MicroArchitecture, physical_cores: u8) -> CacheSlici
|
|||||||
| MicroArchitecture::KabyLake
|
| MicroArchitecture::KabyLake
|
||||||
| MicroArchitecture::CoffeeLake => {
|
| MicroArchitecture::CoffeeLake => {
|
||||||
ComplexAddressing(&SANDYBRIDGE_TO_SKYLAKE_FUNCTIONS[0..((trailing_zeros + 1) as usize)])
|
ComplexAddressing(&SANDYBRIDGE_TO_SKYLAKE_FUNCTIONS[0..((trailing_zeros + 1) as usize)])
|
||||||
}
|
},
|
||||||
MicroArchitecture::SandyBridge
|
MicroArchitecture::SandyBridge
|
||||||
| MicroArchitecture::Haswell | MicroArchitecture::HaswellE
|
| MicroArchitecture::Haswell | MicroArchitecture::HaswellE
|
||||||
| MicroArchitecture::Broadwell
|
| MicroArchitecture::Broadwell
|
||||||
| MicroArchitecture::IvyBridge | MicroArchitecture::IvyBridgeE => {
|
| MicroArchitecture::IvyBridge | MicroArchitecture::IvyBridgeE => {
|
||||||
ComplexAddressing(&SANDYBRIDGE_TO_SKYLAKE_FUNCTIONS[0..((trailing_zeros) as usize)])
|
ComplexAddressing(&SANDYBRIDGE_TO_SKYLAKE_FUNCTIONS[0..((trailing_zeros) as usize)])
|
||||||
|
},
|
||||||
|
MicroArchitecture::Nehalem | MicroArchitecture::Westmere => {
|
||||||
|
SimpleAddressing(((physical_cores -1) as usize) << 6 )// WRONG FIXME !!!
|
||||||
}
|
}
|
||||||
_ => Unsupported,
|
_ => Unsupported,
|
||||||
}
|
}
|
||||||
@ -53,7 +56,7 @@ impl CacheSlicing {
|
|||||||
}
|
}
|
||||||
pub fn hash(&self, addr: usize) -> Option<usize> {
|
pub fn hash(&self, addr: usize) -> Option<usize> {
|
||||||
match self {
|
match self {
|
||||||
SimpleAddressing(&mask) => Some((addr & mask)),
|
SimpleAddressing(mask) => Some((addr & *mask)),
|
||||||
ComplexAddressing(masks) => {
|
ComplexAddressing(masks) => {
|
||||||
let mut res = 0;
|
let mut res = 0;
|
||||||
for mask in *masks {
|
for mask in *masks {
|
||||||
|
Loading…
Reference in New Issue
Block a user