数据帧(矩阵)性能:内存布局

Dan*_* Wu 3 r

我是R的新手.假设数据帧和矩阵的内存布局相同.

在以下矩阵中

一个矩阵=(1:10000000,1000000,10)

它有1M行和10列.行或列的内存是物理上的顺序吗?或物理存储器首先存储[1,1],[2,1],[3,1],[1M,1],[2,1]或[1,2],[1,2], .. [1,10],[2,1] ...?

假设具有10M元素的矩阵的大小为100M,并且L2缓存为4M,则L2缓存不能存储所有这些10M元素.如果我们按顺序处理数据,我们将减少L2缓存丢失率.对于我们的情况,我们需要逐行处理并同时读取多个列,例如列A,B,C,然后创建一些结果.如果内存的布局首先在第1行存储10个项目,然后在第2行存储10个项目,那么性能可能会更好.

如果有任何方法可以控制内存布局?

Spa*_*man 6

矩阵按列存储:

> m=matrix(1:12,nrow=3)
> m
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
Run Code Online (Sandbox Code Playgroud)

数据框只是漂亮的列表,列表存储为元素的向量.我甚至不确定列表元素是否保证在内存中是连续的.

阅读有关如何处理内存的更多信息,请阅读R扩展.据我所知,没有办法控制内存布局.在它成为问题之前不要担心.