2016-04-19 6 views
6

मैं अपने कोड के हिस्सों की दक्षता का परीक्षण करने की कोशिश कर रहा हूं, और सी ++ में clock फ़ंक्शन ctime में है जो clock_t प्रकार का उपयोग कर प्रोग्राम द्वारा खपत प्रोसेसर समय के माप की अनुमति देता है। क्या कुछ जंग बराबर है जो कोड में दो बिंदुओं के बीच पूर्ण समय को माप नहीं रहा है?क्या सी ++ में घड़ी समारोह के बराबर जंग है?

+0

उच्च रिज़ॉल्यूशन टाइमर जैसे https://doc.rust-lang.org/time/time/fn.precise_time_ns.html में क्या गलत है? –

+2

'libc' crate,' clock' function –

+2

@ केर, ओपी उपयोगकर्ता सीपीयू समय के बारे में पूछ रहा है, दीवार घड़ी के समय नहीं। – WiSaGaN

उत्तर

5

यह है आवश्यकclock उपयोग करने के लिए है, तो आप एक परत का एक सा जोड़ने की आवश्यकता होगी। कम से कम ओएस एक्स पर, ऐसा लगता है कि 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

किसी भी कारण से जानें कि 'libc' में' घड़ी 'क्यों शामिल नहीं है। 'घड़ी' 'सी' stdlib में प्रतीत होता है। – WiSaGaN

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; 
} 
संबंधित मुद्दे