【问题标题】:spatial data and parallel computing空间数据和并行计算
【发布时间】:2020-12-22 17:13:59
【问题描述】:

我将在新的一年开始我的论文工作。我将使用大型空间数据进行计算密集型分析(使用美国人口普查区 shapefile 数据运行空间回归和地理加权回归模型)。当我打开 shapefile 时,我当前的计算机死机了。这是一款 4 核、16GB RAM 和 3.4 Ghz 处理器的 MacBook Pro。但我正在升级到具有 128GB RAM、3.6Ghz 处理器和 8 核的 iMac。

但是,我一直在阅读有关并行处理的文章,并意识到 R 只使用一个内核。那么,这是否意味着额外的新内核将毫无用处?如果是这样,那么也许我可以节省一些钱并且不要购买额外的内核?我知道我可以使用并行包(和其他一些包),但我不确定它是否适用于空间回归包。

非常感谢这里的任何建议。

最好, 凯西

【问题讨论】:

    标签: r performance parallel-processing hardware spatial


    【解决方案1】:

    R 能够使用多个内核,但与其他语言(如 python)不同。当您使用 parallel 包时,它几乎会为每个分配的核心启动一个 R 会话。每个核心加载一个数据副本并且不使用共享内存:'(。所以你正在使用多个核心,你的 8 个物理核心应该是 16 个虚拟核心,hyperthreading。例如,如果你加载一个列表在四个数据帧中,您可以使用 parallel 包在四个内核上并行分析它们,每个内核启动一个 R 会话,加载数据并分析部分数据。

    将数据分配给单独的内核的过程有一些开销,因此以串行方式执行工作是最节省资源的。串行意味着四个数据帧中的每一个都按顺序(一个接一个)而不是并行进行分析。

    由于串行执行您想要的操作可能需要很长时间(例如循环数千个独立数据帧),因此并行可以节省您的时间,您可以进行一些扩展测试以确定将要执行的内核数量最高效(例如,使用 20 个内核可能比使用 16 个内核节省一点时间,因为缩放与内核数量的时间增益不是线性的,请参见下面的链接 2)。如果您的数据很大,您可能会遇到内存限制,因为每个核心都需要一大块内存来加载和处理数据(例如,也许您只能使用 4 个核心,因为每个核心需要加载 30 GB 的数据并将其存储在RAM,说得非常非常粗略)。

    我不能说哪些空间包将并行工作,但如果每个核心上的分析彼此独立,那么这应该不是问题(我自己从来没有遇到过问题!)。如果您正在做一些复杂的事情,需要在核心之间将数据拼接在一起,那么可能有些软件包无法处理。

    额外的核心不会毫无用处,但最终计算机资源的最佳分配取决于数据和分析。我想我不会根据单个项目来决定购买什么计算机,您将来可能会进行更多的科学计算,并且通常不一定事先对所需资源有准确的了解。此外,您的大学可能还拥有一些用于繁重任务的高性能计算基础架构。

    这不是一个确定的答案,但评论太长了(如果不合适,我可以删除)!希望它可以帮助:)

    查看这些链接了解更多详情:

    P。 S. 在parallel 包中,确保您使用了适合您操作系统的正确函数,否则它可能只是在您不知情的情况下运行单线程。

    P.P.S 尽你所能通过高效的编程来提高串行的效率(例如,使用数字矩阵而不是数据帧,或者小心地对大数据进行子集化,因为你将在 ram 中创建副本)。做一些分析来找出你的瓶颈在哪里,然后首先关注那些。然后担心并行:)

    【讨论】:

    • 感谢您的评论——我发现它很有帮助。我想我很惊讶 R 只使用一个核心。 Stata 有不同的版本,可以在更多的内核上运行,但您必须支付更多费用。澄清几点(对此很陌生):串行意味着运行一个核心? Parallel 几乎可以与任何软件包一起运行,因为您基本上是在多个内核上循环命令?我想我很惊讶我没有听说过这个,因为不这样做听起来像是在浪费 CPU
    • 嘿,我更新了答案,使其更加清晰,并添加了一些更详细的有用链接。在并行处理方面,R 并不是目前最有效的语言,但它能够使用多个内核。这在很大程度上取决于您的数据,我已经使用 parallel 在 R 中处理了数千个数据帧(100 GB),但是如果您最终得到真的大数据,那么在某些时候您必须离开转为低级语言!
    • 感谢您提供所有这些重要信息。我将深入研究它并了解有关并行处理的更多信息。最感兴趣的是,当我处理一个庞大的全国范围的 shapefile 时,如何让我的计算机最高效,我将使用该文件来绘制和运行空间回归。我的论文主要是空间分析。再次感谢。如果你足够亲切地进行一些跟进,我可能会@你
    • 当然,我可以做到最好。在正确的地方进行小的代码更改可以节省几个小时的处理时间。查看 microbenchmarkprofvis 包以进行时间比较和分析代码。
    猜你喜欢
    • 2023-03-20
    • 2018-08-08
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多