【问题标题】:rasterOptions: Difference between chunksize and maxmemoryrasterOptions:块大小和最大内存之间的区别
【发布时间】:2016-07-14 08:16:39
【问题描述】:

我最近偶然发现了两个可能的 rasterOptions,它们可以提高 R 中光栅操作的性能:chunksizemaxmemory。 然而,我很困惑有什么区别。帮助页面指出:

  • 块大小: 在处理(逐块)基于磁盘的 Raster* 对象时,在单个块中读取/写入的最大单元数。

  • ma​​xmemory: 读入内存的最大单元数。即,如果 Raster* 对象的单元数超过此数量,canProcessInMemory 将返回 FALSE。

据我了解,它们都是相同的,至少我无法通过定义弄清楚它们之间的区别是什么以及它们如何相互影响。 IE。低块大小与高 maxmemory 值相结合?

【问题讨论】:

    标签: r raster r-raster


    【解决方案1】:

    这些选项是光栅包中的帮助程序,通常不需要调用,除非您正在编写用户定义的光栅写入函数。

    如果您的栅格无法读入 R,即canProcessInMemory 返回 FALSE,您需要逐块读取栅格。如果这样做,则提供块的大小,由完整行的整数值确定,将一次读取一个(或并行)。

    您应该在一个块中读取多少行? blockSize() 帮助您确定这一点。

    r <- raster(system.file("external/test.grd", package="raster"))
    blockSize(r)
    

    结合writeValues(),您可以手动将光栅对象的值逐块写入RasterBrick类的对象,速度更快,或者RasterLayer类的对象,更灵活。

    默认值最多读取 1e8 个单元格,这会根据光栅单元格的位数导致不同的内存分配。如果您拥有大量内存,则可以通过增加最大内存量来获得不错的性能提升,同时拥有更多内存的回报也会增加。

    增加块大小并不那么有价值,因为性能下降会返回更大的块大小。通过增加块大小,您将获得一些性能提升,但这并不重要。

    虽然增加块大小有边际收益,但这样做并增加最大内存大小可能不是一个好主意,因为您通过在单个计算中执行此操作来强制整个光栅进入内存,这可能会触发 @ 987654329@ 失败,这将停止光栅的处理,关闭连接,并吐出一些临时文件。

    一个好的经验法则是减少块的大小以避免任何问题(达到一个限制 - 可能是 1e5,您可能永远不会遇到任何问题)并牺牲一点性能,但是为了尽可能增加最大内存(1e9 左右,取决于您的装备有多少 RAM)。

    最后,有一个nice vignette 是关于为太大而无法放入内存的光栅对象编写自定义函数的。

    【讨论】:

    • 我知道这是一个非常古老的帖子,但仍然非常有用。不幸的是,您发布的链接已损坏。您能否发布新链接或指导我到哪里可以找到小插图?
    • 他们有a website,其中包含大部分相同的信息。您可能会发现附录 I 相关。
    猜你喜欢
    • 2020-10-09
    • 2021-11-18
    • 2016-05-10
    • 2021-11-02
    • 1970-01-01
    • 2017-11-11
    • 2022-12-05
    • 2016-05-28
    • 1970-01-01
    相关资源
    最近更新 更多