对于项目,我必须处理30 GB的数据集。我可以使用一个非常强大的超级计算机,它允许我将所有数据集存储在RAM内存中以进行计算计算(我需要整个数据集来实现我必须实现的一些算法)。问题是加载数据集仍然很慢。
我想请你提出加快这个过程的实用建议。我的想法是将加载过程分成C ++ 11显式线程,这将根据线程索引加载单独的数据块。我也听说过STXXL库,但它似乎处理核外计算,因此没有在RAM上加载数据(我想避免,因为我有必要的RAM - 我想我可能会获得通过在其上加载数据集来加快结果。)
答案 0 :(得分:0)
资料。找出程序的哪个部分花费的时间最多,然后优化该部分。其他一切都是微优化。
您可能希望将程序拆分为至少2个线程,可能是3.线程1负责读取数据并放入缓冲区。线程2负责对输入缓冲区执行计算,包括解析,并将结果放入输出缓冲区。线程3将从输出缓冲区获取数据并显示它。
根据输入数据的速度,您可能需要多个输入缓冲区。两个足够,三个或更多,以给计算更多的时间。这个想法是输入线程正在填充一个缓冲区,而计算线程正在处理另一个缓冲区。计算完成后,它从下一个缓冲区开始;与阅读线程类似。
您的另一个瓶颈可能是从内存中获取数据。在网上搜索“数据缓存优化c ++”。除非您正在获取和处理大量数据,否则这是一种微优化。