Как определить, имеет ли CPU хорошую поддержку POPCNT?
У меня есть две версии fast newline-подсчет рутины. Один работает на старом оборудовании, в то время как другой работает намного быстрее, используя инструкцию POPCNT, которая доступна на более новом оборудовании (например, процессоры Intel 6-го поколения).
теперь я хотел бы использовать лучшую версию для каждого процессора - как я могу узнать, имеет ли он высокопроизводительную реализацию POPCNT?
2 ответов
вы могли бы сделать как сказал @kobrien, или вы могли бы принять более цивилизованный подход -cpuid
ящик.
чтобы сделать это, добавьте это в ваш Cargo.toml
а затем, чтобы проверить наличие POPCNT do
extern crate cpuid;
fn have_popcnt() -> Option<bool> {
cpuid::identify().ok().map(|ci| ci.has_feature(cpuid::CpuFeature::POPCNT))
}
на вернутся None
если CPU не поддерживает инструкцию CPUID или Some(hp)
, где hp
определяет доступность POPCNT на нем.