我有以下问题/疑问:
我编写了一个R函数,用于平滑时间序列中的值。时间序列由大量单个全局光栅文件定义,因此每个单个像素具有n
个时间步长(通常大于500)的系列。即使我有足够的RAM,我也不得不依赖于块处理,因为加载整个数据集太多了。到目前为止一切都很好。
我写了(恕我直言)一个相当不错的代码,它尽可能利用并行处理。我有一台加工机器应该配备齐全,可以处理这么多的数据和计算。这让我相信大部分时间都是通过从磁盘读取大量值来完成的,然后在平滑后,将大量值写入磁盘。
所以我尝试使用普通硬盘或普通SSD上的文件来运行代码。 与我的期望相反,这并不重要。 然后我尝试运行一个测试功能,该功能读取文件,获取值并将其写回磁盘,光栅位于HDD,SSD或超快速SSD上。再次,没有显着差异。
我已经做了相当多的分析,以找到瓶颈,以及大量的时间用Google搜索有效的解决方案。这里和那里有一些信息,但我决定在这里发布这个问题,以获得明确的答案,也许还有一些指示我和其他人如何有效地管理事物。
所以没有进一步的麻烦(对于那些跳过上述内容的人),这是我的问题:
在如上所述的设置中(高数据量,块式处理,从磁盘读取和写入),在长栅格时间序列上进行计算的最有效(和/或最快)方式是什么涉及从磁盘读取和写入值?(特别是关于读写方面)
假设我有一个快速的SSD,我该如何利用速度?它是自动完成的吗? 有哪些影响因素(文件大小,文件类型,缓存)以及这些因素的最有效设置?
我知道就光栅而言,R与.grd
的工作速度最快,但出于灵活性,兼容性和磁盘空间的原因,我想避免使用此格式。
也许我也误解了raster
包与磁盘上的文件的交互方式。在这种情况下,我应该使用与getValues
和writeValues
不同的功能吗?
- 一些系统信息和示例代码: -
Os: Win7 x64
CPU: Xenon E5-1650 @ 3.5 GHz
RAM: 128 GB
R-version: 3.2
Raster file format: .rst
读/写基准功能:
benchfun <- function(x){
# x ... raster file
xr <- raster(x)
x2 <- raster(xr)
xval <- getValues(xr)
x2 <- setValues(x2,xval)
writeRaster(x2,'testras.tif',overwrite=TRUE)
}
如果需要,我还可以为时间序列处理提供一些示例代码,但是现在我认为不需要。
欣赏所有提示!
谢谢,
缬氨酸