如何在Mac OS X中获得跨核心的纳秒分辨率相对时间

时间:2013-11-03 15:47:50

标签: c multithreading macos

我目前正在开展一个工作项目,我需要能够测量核心和核心之间的相对耗用时间。纳秒分辨率范围内的线程。谷歌搜索我能够找到以下代码片段:

kern_return_t ret;
clock_serv_t aClock;
mach_timespec_t aTime;

ret = host_get_clock_service(mach_host_self(), REALTIME_CLOCK,
                             &aClock);
if (ret != KERN_SUCCESS) {
    fprintf(stderr, "host_get_clock_service() failed: %s\n",
            mach_error_string(ret));
    abort();
}
ret = clock_get_time(aClock, &aTime);
if (ret != KERN_SUCCESS) {
    fprintf(stderr, "clock_get_time() failed: %s\n",
            mach_error_string(ret));
    abort();
}

使用此函数clock_get_time确实返回一个结构,其中包含自CPU启动以来经过的秒数和纳秒数。但是,我不确定此函数返回的值是否可以安全地跨核心和线程使用。

除了马赫调用的一些手册页之外,我找不到这方面的文档。有人试过吗?如果是这样,你能指出我的文件方式吗?我需要明确知道计数器在核心和线程之间是一致的。

我知道这个问题是特定于硬件和操作系统的。我目前在Intel Core i7 2.5 ghz处理器上运行Mac OS X 10.9。

感谢您的时间。

0 个答案:

没有答案