Parallel processing julia中的并行文本处理

Parallel processing julia中的并行文本处理,parallel-processing,julia,Parallel Processing,Julia,我试图编写一个简单的函数,读取一系列文件并对它们执行一些正则表达式搜索(或仅仅是字数计算),然后返回匹配数,我试图使其并行运行以加快速度,但到目前为止,我无法实现这一点 如果我用一个数学运算做一个简单的循环,我会得到显著的性能提升。但是,grep函数的类似想法并不能提高速度: function open_count(file) fh = open(file) text = readall(fh) length(split(text)) end tic() total

我试图编写一个简单的函数,读取一系列文件并对它们执行一些正则表达式搜索(或仅仅是字数计算),然后返回匹配数,我试图使其并行运行以加快速度,但到目前为止,我无法实现这一点

如果我用一个数学运算做一个简单的循环,我会得到显著的性能提升。但是,grep函数的类似想法并不能提高速度:

function open_count(file)
    fh = open(file)
    text = readall(fh)
    length(split(text))
end



tic()
total = 0
for name in files
    total += open_count(string(dir,"/",name))
    total
end
toc()
elapsed time: 29.474181026 seconds


tic()
total = 0
total = @parallel (+) for name in files
    open_count(string(dir,"/",name))
end
toc()

elapsed time: 29.086511895 seconds

我尝试了不同的版本,但速度没有明显提高。我做错什么了吗?

我在R和Python方面也遇到过类似的问题。正如其他人在评论中指出的,您应该从分析器开始

如果阅读占据了大部分时间,那么你就无能为力了。您可以尝试将文件移动到不同的硬盘,然后从那里读取。 您还可以尝试一种RAMDisk类型的解决方案,它基本上使您的RAM看起来像永久存储器(减少可用RAM),但这样您就可以获得非常快的读写速度

但是,如果使用时间来执行正则表达式,则要考虑以下几点: 创建一个函数,将一个文件作为一个整体读入,并拆分出单独的行。这应该是一个连续读取,因此尽可能快。然后创建并行版本的regex,并行处理每一行。这样,整个文件都在内存中,您的计算核心可以更快地读取数据。这样,您可能会看到性能有所提高


这是我在处理大型文本文件时使用的一种技术。

27秒处理一个文件?我猜这些是相当大的磁盘文件,它们不适合处理器的磁盘缓存,每次都必须从磁盘读取。那么,您所能期望的最佳时间就是从磁盘读取两个文件的时间。通常,磁盘一次只能读取一个位置-->磁盘读取是顺序的,因此没有加速。它不是一个文件,而是一个文件列表(我认为总共几乎有1 GB)。我应该这么说。但是谢谢你的解释。我不能测试这个,因为我没有这么大的文件可以测试。您能否发布一个脚本,生成具有相同结构和大小的内容?您的操作系统可能占用了这里的大部分时间。您是否考虑过关闭open_count()中的文件?您分析过吗?这样做将告诉您瓶颈是在I/O中还是在正则表达式中。如果是前者,考虑在多个驱动器上扩展文件。@ IVNEN关闭文件稍微提高性能,这将是有益的。有了这个,你可以得到一个相似的语料库。