parallel-processing – julia中的并行文本处理

我正在尝试编写一个简单的函数,它读取一系列文件并对它们执行一些正则表达式搜索(或只是一个字数),然后返回匹配的数量,我试图使这个运行与速度并行它,但到目前为止,我一直无法做到这一点.

如果我使用数学运算进行简单的循环,我会获得显着的性能提升.但是,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看起来像永久存储(减少可用内存),但随后您可以获得非常快速的读取和写入.

但是,如果时间用于执行正则表达式,请考虑以下内容:
创建一个函数,将整个文件读入并分割出单独的行.这应该是连续阅读,因此尽可能快.然后创建正则表达式的并行版本,并行处理每一行.这样整个文件就在内存中,您的计算内核可以更快地扫描数据.这样你可能会看到性能有所提高.

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

点赞