0

对于一个项目,我必须处理 30 GB 的数据集。我可以使用一个非常强大的超级计算机,它可以让我将所有数据集存储在 RAM 内存中以进行计算(我需要整个数据集来实现我必须实现的一些算法)。问题是加载数据集仍然很慢。

我想请你提供实用的建议来加快这个过程。我的想法是将加载过程划分为 C++11 显式线程,这些线程将根据线程索引加载单独的数据块。我也听说过 STXXL 库,但它似乎处理核外计算,因此没有在 RAM 上加载数据(我想避免这种情况,因为我有必要的 RAM——我想我可能会得到通过在其上加载数据集可以更快地获得结果)。

4

1 回答 1

0

轮廓。找出程序的哪个部分花费的时间最多,然后优化该部分。其他一切都是微优化。

您可能希望将程序分成至少 2 个线程,也许是 3 个。线程 1 负责读取数据并放入缓冲区。线程 2 负责执行计算,包括解析输入缓冲区并将结果放入输出缓冲区。线程 3 将从输出缓冲区获取数据并显示它。

根据输入数据的速度,您可能需要多个输入缓冲区。两个就足够了,三个或更多可以给计算更多时间。这个想法是输入线程正在填充一个缓冲区,而计算线程正在处理另一个缓冲区。计算完成后,从下一个缓冲区开始;与阅读线程类似。

您的另一个瓶颈可能是从内存中获取数据。在网上搜索“数据缓存优化 C++”。这是一个微优化,除非您正在获取和处理大量数据。

于 2013-10-16T15:17:01.910 回答