gpt4 book ai didi

r - 使用 data.table 进行内存分析

转载 作者:行者123 更新时间:2023-12-04 09:14:31 25 4
gpt4 key购买 nike

在包含对 data.table 的调用的 R 代码中分析内存的正确方法是什么?职能?假设我想确定表达式期间的最大内存使用量。

此引用表示 Rprofmem可能不是正确的选择:
https://cran.r-project.org/web/packages/profmem/vignettes/profmem.html

All memory allocations that are done via the native allocVector3() part of R's native API are logged, which means that nearly all memory allocations are logged. Any objects allocated this way are automatically deallocated by R's garbage collector at some point. Garbage collection events are not logged by profmem(). Allocations not logged are those done by non-R native libraries or R packages that use native code Calloc() / Free() for internal objects. Such objects are not handled by the R garbage collector.



data.table 源代码包含大量对 Calloc() 的调用。和 malloc()所以这表明 Rprofmem不会测量 data.table 分配的所有内存职能。如 Rprofmem不是正确的工具,Matthew Dowle 怎么会在这里使用它: R: loop over columns in data.table ?

我找到了一个引用文献,其中暗示了 gc() 的类似潜在问题。 (可用于测量两次调用 gc() 之间的最大内存使用量):
https://r.789695.n4.nabble.com/Determining-the-maximum-memory-usage-of-a-function-td4669977.html

gc() is a good start. Call gc(reset = TRUE) before and gc() after your task, and you will see the maximum extra memory used by R in the interim. (This does not include memory malloced by compiled code, which is much harder to measure as it gets re-used.)



我发现没有任何迹象表明 Rprof(memory.profiling=TRUE) 存在类似的问题.这是否意味着 Rprof方法适用于 data.table即使它并不总是使用 R API 来分配内存?

Rprof(memory.profiling=TRUE)事实上,这不是工作的正确工具,什么才是?

ssh.utils::mem.usage工作?

最佳答案

这与data.table 无关。最近在 twitter 上讨论了相同的 dplyr 行为:https://mobile.twitter.com/healthandstats/status/1182840075001819136

/usr/bin/time -v Rscript -e 'library(data.table); CJ(1:1e4, 1:1e4)' |& grep resident

还有有趣的 cgmemtime项目,但它需要更多的设置。

如果您使用的是 Windows,我建议您迁移到 Linux。

关于r - 使用 data.table 进行内存分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58278838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com