我试图测试代码部分的效率,而C ++在clock
中有一个ctime
函数,允许使用{{}来测量程序所消耗的处理器时间。 1}}类型。是否有一些Rust等价物不仅仅是测量代码中两点之间的绝对时间?
答案 0 :(得分:5)
如果必需使用clock
,则需要添加一些垫片。至少在OS X上,似乎libc不公开clock
,但它 给你clock_t
(这是等式中较难的部分)。然后公开clock
直截了当:
extern crate libc;
mod ffi {
extern {
pub fn clock() -> ::libc::clock_t;
}
}
fn main() {
let start = unsafe { ffi::clock() };
let mut dummy = 0;
for i in 0..20000 { dummy += i };
let end = unsafe { ffi::clock() };
println!("{}, {}, {}, {}", dummy, start, end, end - start);
}
我可能会创建一个包装器,标记clock
在任何情况下都可以安全地调用。
答案 1 :(得分:3)
我一直在使用此代码:
extern crate libc;
use std::mem;
use std::io;
use std::time::Duration;
pub fn cpu_time() -> Duration {
unsafe {
let mut tp = mem::uninitialized();
if sys::clock_gettime(sys::CLOCK_PROCESS_CPUTIME_ID, &mut tp) == 0 {
Duration::new(tp.tv_sec as u64, tp.tv_nsec as u32)
} else {
panic!("cpu_time: {}", io::Error::last_os_error());
}
}
}
mod sys {
use libc::{c_int, timespec};
extern "C" {
pub fn clock_gettime(clk_id: c_int, tp: *mut timespec) -> c_int;
}
pub const CLOCK_PROCESS_CPUTIME_ID: c_int = 2;
}