相关疑难解决方法(0)

在Linux中测量时间 - 时间与时钟对比getrusage vs clock_gettime vs gettimeofday vs timespec_get?

其中计时功能,time,clock getrusage,clock_gettime,gettimeofdaytimespec_get,我想清楚地了解它们是如何实现的,为了知道在什么情况下我必须使用他们什么是他们的返回值.

首先,我们需要对返回wall-clock值的函数进行分类,与返回进程或线程值的函数进行比较.gettimeofday返回wall-clock值,clock_gettime返回wall-clock值进程或线程值,具体取决于Clock传递给它的参数.getrusageclock返回过程值.

然后第二个问题涉及这些功能的实施,因此,它们的准确性.这些功能使用哪种硬件或软件机制.

似乎getrusage只使用内核tick(通常为1ms长),因此不能比ms更准确.这样对吗?然后该getimeofday函数似乎使用最准确的底层硬件.因此,它的准确性通常是近期硬件上的微秒(因为API而不能更多).那么clock,手册页谈的是"近似",它是什么意思?那么clock_gettime,API是纳秒级,是否意味着如果底层硬件允许它,它能够如此准确?单调性怎么样?

还有其他功能吗?

c linux time linux-kernel

137
推荐指数
2
解决办法
6万
查看次数

访问malloc声明的数组

我正在完成一项任务(另一个问题的细节).作为其中的一部分,我增加了数组的大小.并发现当我尝试初始化数组时:

int arr[2097152]; // 8MB
Run Code Online (Sandbox Code Playgroud)

我有分段错误...我认为它是因为我试图声明一个太大的数组?然后我找到了解决这个问题的方法就是使用malloc.但是对C来说是新手(主要使用JavaScript/Python/Java ......).我对指针和东西很困惑......

我已经声明了一个8MB的数组:

int *arr = malloc (MBs * 1024 * 1024 / sizeof(int)); // MBs = 8
Run Code Online (Sandbox Code Playgroud)

但是现在......我如何访问它或写入它?当我使用它arr时,我得到的地址,如果我使用*arr我得到第一个元素?

c pointers

6
推荐指数
2
解决办法
2万
查看次数

x86 Assembly Force缓存存储

我有一个任务,我需要测量访问L1,L2和L3缓存中的数据的延迟,以及主内存.这将在C中完成.

我花了几个小时研究测量缓存延迟的方法,并且调整得很少.我已经下载了一些基准测试工具,这些工具给了我缓存访问时间,但在我自己的代码中实现它时,我还没有得到任何结论.我知道缓存中发生的事情在C中不符合我的要求.

我的下一个想法是,如果我可以强制使用来自x86程序集的东西填充缓存(首先想到)然后只对我刚刚加载的数据做一个clock(),access(),clock(),据说时间就是准确的(是)访问时间,因为我知道它应该在缓存中找到,因为我只是用我的内联asm或类似的方法把它放在那里...

如果有人能够在这里为我的任务提供见解,那将是非常棒的.是否告诉我,我因为想要使用asm在缓存中加载某些东西而疯狂,或者向我介绍可能对我有帮助的其他东西.

非常感谢!

c x86 assembly caching

6
推荐指数
1
解决办法
2593
查看次数

分段错误:arr [(i*16)%arrLen] vs arr [i%arrLen]

处理我的任务,在另一个问题中处理更多细节.如果我使用

arr[(i * 16) % arrLen] *= 2; // seg fault
Run Code Online (Sandbox Code Playgroud)

VS

arr[i % arrLen] *= 2; // OK!
Run Code Online (Sandbox Code Playgroud)

为什么?完整来源见第31行.为什么?我模数组的长度,所以应该没问题?

c

1
推荐指数
1
解决办法
137
查看次数

标签 统计

c ×4

assembly ×1

caching ×1

linux ×1

linux-kernel ×1

pointers ×1

time ×1

x86 ×1