空间数据与并行计算
spatial data and parallel computing
我将在新的一年开始我的论文工作。我将对大型空间数据进行计算密集型分析(运行 空间回归和地理加权回归模型与美国人口普查区 shapefile 数据)。当我打开 shapefile 时,我当前的计算机死机了。这是一款配备 4 核、16GB RAM 和 3.4 Ghz 处理器的 MacBook Pro。但我正在升级到具有 128GB 内存、3.6Ghz 处理器和 8 核的 iMac。
但是,我一直在阅读有关并行处理的内容,并意识到 R 只使用一个内核。那么,这是否意味着额外的新内核将毫无用处?如果是这样,那么也许我可以节省一些钱而不去购买额外的核心?我知道我可以使用并行包(和其他一些包),但我不确定它是否适用于空间回归包。
如有任何建议,我们将不胜感激。
最好,
凯西
R 能够使用多个内核,但使用方式与 python 等其他语言不同。当您使用 parallel
包时,它几乎会为每个分配的核心启动一个 R 会话。每个内核加载数据的副本并且不使用共享内存:'(。所以你正在使用多个内核,你的 8 个物理内核应该是 16 个具有 hyperthreading 的虚拟内核。例如,如果你加载四个数据帧的列表,您可以使用 parallel
包在四个内核上并行分析它们,每个内核启动一个 R 会话,加载数据,并分析部分数据。
将数据分配给不同核心的过程会产生一些开销,因此串行执行一项工作是最节省资源的。串行意味着四个数据帧中的每一个都按顺序(一个接一个)分析,而不是并行分析。
由于串行执行你想做的事情可能需要很长时间(比如循环处理数千个独立的数据帧),并行可以节省你的时间,你可以做一些扩展测试来确定核心的数量将是最有效的(例如,使用 20 个内核可能比使用 16 个内核节省更多时间,因为时间增益随内核数量的缩放不是线性的,请参见下面的 link 2)。如果你的数据很大,你可能 运行 进入 ram 限制,因为每个内核都需要一大块 ram 来加载和处理数据(例如,也许你只能使用 4 个内核,因为每个内核需要加载 30 GB 的数据并将其存储在RAM中,非常非常粗略)。
我不能说哪些空间包可以并行工作,但如果每个核心的分析相互独立,那么这应该不是问题(我自己从来没有遇到过问题!)。如果您正在做一些复杂的事情,需要将数据在核心之间缝合在一起,那么可能有些软件包无法处理。
额外的核心不会毫无用处,但最终计算机资源的最佳分配取决于数据和分析。我想我不会根据单个项目来决定购买什么计算机,您将来可能会进行更多的科学计算,并且通常不一定事先准确了解所需的资源。此外,您的大学也可能拥有一些用于繁重任务的高性能计算基础设施。
这不是一个明确的答案,但对于评论来说太长了(如果不合适我可以删除)!希望对你有帮助:)
有关详细信息,请参阅这些 link:
P. S. 在 parallel
包中,确保你为你的 OS 使用了正确的函数,否则它可能只是 运行 单线程而你不知道。
P.P.S 尽你所能通过高效编程提高串行效率(例如,使用数字矩阵而不是数据帧,或者在 ram 中创建副本时小心地对大数据进行子集化)。做一些分析来找出你的瓶颈在哪里,然后首先关注那些。然后担心并行:)
我将在新的一年开始我的论文工作。我将对大型空间数据进行计算密集型分析(运行 空间回归和地理加权回归模型与美国人口普查区 shapefile 数据)。当我打开 shapefile 时,我当前的计算机死机了。这是一款配备 4 核、16GB RAM 和 3.4 Ghz 处理器的 MacBook Pro。但我正在升级到具有 128GB 内存、3.6Ghz 处理器和 8 核的 iMac。
但是,我一直在阅读有关并行处理的内容,并意识到 R 只使用一个内核。那么,这是否意味着额外的新内核将毫无用处?如果是这样,那么也许我可以节省一些钱而不去购买额外的核心?我知道我可以使用并行包(和其他一些包),但我不确定它是否适用于空间回归包。
如有任何建议,我们将不胜感激。
最好, 凯西
R 能够使用多个内核,但使用方式与 python 等其他语言不同。当您使用 parallel
包时,它几乎会为每个分配的核心启动一个 R 会话。每个内核加载数据的副本并且不使用共享内存:'(。所以你正在使用多个内核,你的 8 个物理内核应该是 16 个具有 hyperthreading 的虚拟内核。例如,如果你加载四个数据帧的列表,您可以使用 parallel
包在四个内核上并行分析它们,每个内核启动一个 R 会话,加载数据,并分析部分数据。
将数据分配给不同核心的过程会产生一些开销,因此串行执行一项工作是最节省资源的。串行意味着四个数据帧中的每一个都按顺序(一个接一个)分析,而不是并行分析。
由于串行执行你想做的事情可能需要很长时间(比如循环处理数千个独立的数据帧),并行可以节省你的时间,你可以做一些扩展测试来确定核心的数量将是最有效的(例如,使用 20 个内核可能比使用 16 个内核节省更多时间,因为时间增益随内核数量的缩放不是线性的,请参见下面的 link 2)。如果你的数据很大,你可能 运行 进入 ram 限制,因为每个内核都需要一大块 ram 来加载和处理数据(例如,也许你只能使用 4 个内核,因为每个内核需要加载 30 GB 的数据并将其存储在RAM中,非常非常粗略)。
我不能说哪些空间包可以并行工作,但如果每个核心的分析相互独立,那么这应该不是问题(我自己从来没有遇到过问题!)。如果您正在做一些复杂的事情,需要将数据在核心之间缝合在一起,那么可能有些软件包无法处理。
额外的核心不会毫无用处,但最终计算机资源的最佳分配取决于数据和分析。我想我不会根据单个项目来决定购买什么计算机,您将来可能会进行更多的科学计算,并且通常不一定事先准确了解所需的资源。此外,您的大学也可能拥有一些用于繁重任务的高性能计算基础设施。
这不是一个明确的答案,但对于评论来说太长了(如果不合适我可以删除)!希望对你有帮助:)
有关详细信息,请参阅这些 link:
P. S. 在 parallel
包中,确保你为你的 OS 使用了正确的函数,否则它可能只是 运行 单线程而你不知道。
P.P.S 尽你所能通过高效编程提高串行效率(例如,使用数字矩阵而不是数据帧,或者在 ram 中创建副本时小心地对大数据进行子集化)。做一些分析来找出你的瓶颈在哪里,然后首先关注那些。然后担心并行:)