使用Cuda并行读取多个文本文件

时间:2012-01-23 11:21:13

标签: boost cuda pattern-matching parallel-processing

我想使用CUDA并行搜索多个文件中的给定字符串。我计划使用pfac库来搜索给定的字符串。这个问题是如何并行访问多个文件。

示例:我们有一个包含1000个文件的文件夹,必须进行搜索。

这里的问题是如何访问给定文件夹中的多个文件。应该动态获取文件夹中的文件,并为每个线程分配一个文件来搜索给定的字符串。

有可能????

编辑:

在这篇文章中:very fast text file processing (C++)。他正在使用boost库在16秒内读取3 GB的文本文件。在我的情况下,我必须阅读1000个较小的文件

谢谢

2 个答案:

答案 0 :(得分:3)

在CUDA中执行任务对于在CPU中执行相同操作无济于事。

假设您的文件存储在标准的磁性HDD上,典型的单线程CPU程序将消耗:

  1. 大约5ms找到存储文件的扇区并将其放在读头下。
  2. 将1MB文件(假设读取速度为100MB / s)加载到RAM内存约10ms
  3. 将1MB数据从RAM加载到CPU缓存不到0.1ms,并使用线性搜索算法对其进行处理。
  4. 对于单个文件,这是15.1ms。如果您有1000个文件,则需要15.1秒来完成工作。

    现在,如果我为您提供具有无限内存带宽,无延迟和无限处理器速度的超强GPU,您将能够毫不费力地执行任务(3)。但是,HDD读取仍将消耗完全相同的时间。 GPU无法并行化另一个独立设备的工作。 因此,您现在可以在15.0秒内完成,而不是花费15.1秒。

    无限的GPU会让你加速0.6%。一个真正的GPU甚至都不会那么接近!


    在更一般的情况下:如果您考虑使用CUDA,请问自己:实际计算是问题的瓶颈吗?

    • 如果是 - 继续在CUDA世界中寻找可能的解决方案。
    • 如果没有 - CUDA无法帮助你。

    如果你处理微小文件的thousants并且你需要经常执行读取,请考虑可以“攻击”你的瓶颈的技术。有些可能包括:

    • RAM缓冲
    • 将硬盘置于RAID配置中
    • 获取SSD

    可能有更多选择,我不是该领域的专家。

答案 1 :(得分:1)

是的,可能使用CUDA 来加速,如果,您可以减少读取延迟/带宽的影响。一种方法是同时执行多个搜索。即如果您可以在大型大海捞针中搜索[needle1],.. [needle1000],那么每个线程都可以搜索干草堆并存储命中。需要对每次比较所需的吞吐量进行一些分析,以确定是否可以通过使用CUDA来改进搜索。这可能很有用http://dl.acm.org/citation.cfm?id=1855600