【发布时间】:2012-12-26 17:54:58
【问题描述】:
当有更多的核心/缓存持有该行的副本时,您能否帮助我确定缓存写入是否需要更长的时间才能完成。 我还想测量/量化实际需要多长时间。
我在谷歌上找不到任何有用的东西,而且我自己测量它并解释我测量的东西时遇到了麻烦,因为现代处理器上可能发生很多事情。 (重新排序、预取、缓冲和天知道是什么)
详情:
我的基本测量过程大致如下:
write soemthing to the cacheline on processor 0
read it on processors 1 to n.
rdtsc
write it on process 0
rdtsc
我什至不确定在进程 0 上实际使用哪些指令进行读/写,以确保在最终时间测量之前完成写/无效。
目前我在摆弄原子交换 (__sync_fetch_and_add()),但似乎线程数本身对于此操作的长度很重要(而不是要失效的线程数)——这可能不是我要测量什么?!
我还尝试了读取,然后写入,然后是内存屏障 (__sync_synchronize())。这看起来更像我期望看到的, 但在这里我也不确定最终 rdtsc 发生时写入是否完成。
您可以猜到,我对 CPU 内部的了解有些有限。
非常感谢任何帮助!
ps: * 我使用 linux、gcc 和 pthreads 进行测量。 * 我想知道这一点,以便为我的并行算法建模。
编辑:
大约一周后(明天去度假)我会做更多的研究并发布我的代码和注释并将其链接到此处(以防有人感兴趣),因为我可以花在这方面的时间是有限的。
【问题讨论】:
标签: c parallel-processing cpu-cache