parallel-processing - Julia 中的并行文本处理

标签 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 看起来像永久存储(减少可用 ram),但随后您可以获得非常快的读写速度。

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

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

关于parallel-processing - Julia 中的并行文本处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21301224/

相关文章:

multithreading - 为什么我使用 openMP atomic 的并行代码比串行代码花费更长的时间?

Julia:具有内部构造函数的参数类型:new 和 typeof

julia - 使用一行代码在 Julia 中读取多个变量(从标准输入)

julia - 在 Julia 中初始化任意稀疏数组

python - Cython prange 与字符串数组

bash - 并行运行两个连续的 bash 脚本 4 次

c# - 从外部打破 Parallel ForEach

c++ - OpenMP 优化 for 循环的调度

julia - Julia 中的多维数组理解

Julia Flux 错误 : SGD optimiser is undefined