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

Boost 使用Cuda并行读取多个文本文件,boost,cuda,pattern-matching,parallel-processing,Boost,Cuda,Pattern Matching,Parallel Processing,我想使用CUDA在多个文件中并行搜索给定字符串。我计划使用pfac库来搜索给定的字符串。问题是如何并行访问多个文件 示例:我们有一个文件夹,其中包含1000个必须搜索的文件 这里的问题是如何访问给定文件夹中的多个文件。应该动态获取文件夹中的文件,并为每个线程分配一个文件以搜索给定字符串 有可能吗 编辑: 在本文中:。他正在使用boost库在16秒内读取一个3 GB的文本文件。而在我的情况下,我必须读取1000个较小的文件 谢谢在CUDA中执行任务对在CPU中执行同样的任务没有多大帮助 假设您的文

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

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

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

有可能吗

编辑:

在本文中:。他正在使用boost库在16秒内读取一个3 GB的文本文件。而在我的情况下,我必须读取1000个较小的文件


谢谢

在CUDA中执行任务对在CPU中执行同样的任务没有多大帮助

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

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

    现在,如果我给你超级强大的GPU,它具有无限的内存带宽、无延迟和无限的处理器速度,你将能够在没有时间的情况下执行任务(3)。但是,HDD读取仍将消耗完全相同的时间。GPU不能并行处理另一个独立设备的工作。 因此,您现在不用花费15.1秒,而是在15.0秒内完成

    无限GPU会给你0.6%的加速。一个真正的GPU甚至不会接近这一点


    在更一般的情况下:如果考虑使用CUDA,请扪心自问:实际计算是问题的瓶颈吗?< /P>
    • 如果是-继续在CUDA世界中寻找可能的解决方案
    • 如果没有-CUDA无法帮助您

    如果你处理数以千计的微小文件,你需要经常阅读,考虑一些可以“攻击”你瓶颈的技术。其中包括:

    • RAM缓冲
    • 将硬盘驱动器置于RAID配置中
    • 获得固态硬盘

    可能有更多的选择,我不是这方面的专家。

    是的,如果您可以减少读取延迟/带宽的影响,使用CUDA可能会提高速度。一种方法是同时执行多个搜索。即,如果您可以搜索[1]。。[needle1000]在你的大草堆中,每条线都可以搜索草堆碎片并存储命中结果。需要对每次比较所需的吞吐量进行一些分析,以确定使用CUDA是否有可能改进您的搜索。这可能很有用

    通常有多少文件?10秒,100秒,1000秒,更多?这是可能的。问题在于,由于只有一个磁头,从磁盘上读取它们本质上是顺序的。如果搜索是类似字符串的搜索,你可能很难打败grep。因此,你的意思是可以并行读取文件,但这比grep慢。我必须在文件内容中搜索给定字符串,如果你错了,我不会搜索文件名。是的,对于CUDA来说,这似乎不是一个好的ft——从磁盘读取文件,然后将数据复制到GPU内存的成本可能远远大于字符串搜索中任何可能的速度优势。如果你需要在同一组文件上进行多次搜索,并且可以同时将所有文件加载到GPU内存中,这是唯一有意义的方法。如果这听起来很愚蠢,我深表歉意,因为我是cuda的新手,但是必须将文件传输到GPU内存。我不想将文件复制到GPU内存中。有其他选择吗???