【发布时间】:2011-02-26 11:50:21
【问题描述】:
我想知道我正在使用的需要大量内存的程序是否受到内存带宽的限制。
您预计这会在什么时候发生?你有没有在现实生活中发生过这种情况?
我找到了几篇讨论这个问题的文章,包括:
- http://www.cs.virginia.edu/~mccalpin/papers/bandwidth/node12.html
- http://www.cs.virginia.edu/~mccalpin/papers/bandwidth/node13.html
- http://ispass.org/ucas5/session2_3_ibm.pdf
第一个链接有点旧,但建议您需要对每个浮点变量执行少于 1-40 次浮点运算才能看到这种效果(如果我错了,请纠正我)。
如何测量给定程序正在使用的内存带宽以及如何测量我的系统可以提供的(峰值)带宽?
我不想在这里讨论任何复杂的缓存问题。我只对CPU和内存之间的通信感兴趣。
【问题讨论】:
-
不幸的是,如果您想回答您的问题,就无法避免陷入复杂的缓存问题
-
嗯,假设我用 1.0s 初始化整个内存。然后我将每个元素与一个常数相乘。并重复这个过程..
-
访问所有内存将导致您受到内存带宽的限制,除非访问的元素之间的间隔很长。哪个,听上去,不会。
-
这正是我想知道的。间隔多长时间?
标签: c linux memory-management hpc