我想使用CUDA并行搜索多个文件中的给定字符串。我计划使用pfac库来搜索给定的字符串。这个问题是如何并行访问多个文件。
示例:我们有一个包含1000个文件的文件夹,必须进行搜索。
这里的问题是如何访问给定文件夹中的多个文件。应该动态获取文件夹中的文件,并为每个线程分配一个文件来搜索给定的字符串。
有可能????
编辑:
在这篇文章中:very fast text file processing (C++)。他正在使用boost库在16秒内读取3 GB的文本文件。在我的情况下,我必须阅读1000个较小的文件
谢谢
答案 0 :(得分:3)
在CUDA中执行任务对于在CPU中执行相同操作无济于事。
假设您的文件存储在标准的磁性HDD上,典型的单线程CPU程序将消耗:
对于单个文件,这是15.1ms。如果您有1000个文件,则需要15.1秒来完成工作。
现在,如果我为您提供具有无限内存带宽,无延迟和无限处理器速度的超强GPU,您将能够毫不费力地执行任务(3)。但是,HDD读取仍将消耗完全相同的时间。 GPU无法并行化另一个独立设备的工作。 因此,您现在可以在15.0秒内完成,而不是花费15.1秒。
无限的GPU会让你加速0.6%。一个真正的GPU甚至都不会那么接近!
在更一般的情况下:如果您考虑使用CUDA,请问自己:实际计算是问题的瓶颈吗?
如果你处理微小文件的thousants并且你需要经常执行读取,请考虑可以“攻击”你的瓶颈的技术。有些可能包括:
可能有更多选择,我不是该领域的专家。
答案 1 :(得分:1)
是的,可能使用CUDA 来加速,如果,您可以减少读取延迟/带宽的影响。一种方法是同时执行多个搜索。即如果您可以在大型大海捞针中搜索[needle1],.. [needle1000],那么每个线程都可以搜索干草堆并存储命中。需要对每次比较所需的吞吐量进行一些分析,以确定是否可以通过使用CUDA来改进搜索。这可能很有用http://dl.acm.org/citation.cfm?id=1855600