提问人:northerner 提问时间:12/10/2019 更新时间:12/10/2019 访问量:55
在分解大型数据结构进行处理时,应该以什么大小为目标?具体筛段尺寸
What size should be aimed for when breaking up large data structures for processing? Specifically segment size of sieve
问:
一些大型数据结构的引用局部性较低。这对缓存不利。我正在实施埃拉托色尼的筛子。它包含一长串数字。可以分段处理列表以提高缓存命中率。区段大小应该是多少?我听说 L1 指令集缓存应该效果最好。根据我的测试,较大的尺寸效果更好,尽管我基本上只是尝试不同的尺寸。为什么大于 L1 缓存的大小实际上会导致整体更快的执行时间?缓存大小应该是单个内核还是所有内核?除了 CPU 缓存之外,还有其他可能的值,例如页面大小?
我知道分析将确定最佳大小,但我首先需要知道要测试哪些值。
在 Windows 任务管理器中,它说计算机有 256KB L1 缓存。但在 CPU-Z 中,它说 L1 数据是“4x32 KB”。在我的程序中,数字列表由 Since an 是 ' 字节表示,我猜 KB 实际上是 kibibytes,所以段大小为 32x1024。因为一个千字节中有 2^10 个字节。这一切都正确吗?std::vector<unsigned char>
unsigned-char
答: 暂无答案
上一个:用于形成嵌套邻居邻接列表的算法
下一个:不同语言的浮点精度
评论
O(n/log n)
n