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